home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 2 / Amiga Tools 2.iso / tools / mg / docs / amiga next >
Text File  |  1995-03-09  |  29KB  |  712 lines

  1.  
  2.             Amiga MG 3Beta4 Release Notes
  3.             -------------------------
  4.  
  5.    This file attempts to document the Amiga-specific features of MG 2a.
  6. Except where otherwise noted.  It is assumed that you already know
  7. about the point and the mark, buffers, windows, extended commands, and
  8. the various areas on the screen that all versions of MG maintain.  If
  9. you don't, see the MG documentation (what there is of it) for more
  10. information. 
  11.  
  12.                   Amiga Credits
  13.                   -------------
  14.  
  15.   The Amiga Intuition terminal driver is the combined effort of Mike
  16. Meyer and Mic Kaczmarczik.  Others who helped and/or inspired good
  17. ideas for the MG terminal driver include Steve Walton, Leon Frenkel,
  18. Marcus Brooks, and Tom Rokicki.  Steve Walton is also responsible for
  19. the dired mode. Bob Larson redesigned the MG keymap system, making it
  20. possible for function keys and mouse clicks to be ``first-class
  21. citizens''. Lastly, Mike Meyer added the Rexx support and redesigned
  22. the MG keymap & macro facilities, adding named keyboard macros and
  23. making them first-class objects.
  24.  
  25.                               OPTIONS
  26.                               -------
  27.  
  28.    This section is for people who have their own C compiler. If you
  29. don't have a C compiler, you will hopefully have a version that has
  30. everything compiled into it. 
  31.  
  32.    There are a bewildering variety of extra goodies available as
  33. compile-time options when you construct an Amiga MG. If you select none
  34. of them, you save on disk and memory space, but lose out on some
  35. features and versatility. 
  36.  
  37.    The config files provides documentation on these options and what
  38. to do to make them work. Read those and the documentation on config
  39. for descriptions on them.
  40.  
  41.     For those without ARexx (required to use the config program), the
  42. directory for the fully-featured configuration (Burrito) has been
  43. provided. The documentation for config should provide enough
  44. information to allow you to edit the include files by hand to create
  45. any version you wish to build.
  46.  
  47.                               THE MOUSE
  48.                               ---------
  49.  
  50.    The Amiga Mouse can invoke no less than 24 different functions.
  51. Mouse clicks are essentially treated as keys by the MG, even though you
  52. click the mouse and hold down qualifier keys to get them. 
  53.  
  54.    Mouse keys come in three groups of eight, the groups being:
  55.     Mouse keys        -- when clicked in the text of a window
  56.     Mode-Mouse keys        -- when clicked on a window's mode line
  57.     Echo-Mouse keys        -- when clicked in the echo area
  58.  
  59.    Inside each group, which of the eight keys you get is determined by
  60. the combination of Shift, CTRL and ALT keys you are holding down when
  61. the mouse button is pressed. So yes, there really is a
  62. Ctrl-Meta-Shift-Mode-Mouse button.  Note that the Meta (M-) prefix
  63. *MUST* be the ALT key. Prefixing a mouse click with ESC will not work. 
  64.  
  65.    Mouse keys are generally bound to functions that affect the text in
  66. the selected buffer. If the Intuition mouse pointer is located inside an
  67. MG text window (i.e. an area where text is being edited), then a Mouse
  68. key is sent to the editor when you click the mouse. The buffer
  69. associated wth the window the pointer is in is made current, point is
  70. set as close as possible to the pointer (the character under the
  71. pointer, if possible), then the command bound to that mouse button is
  72. executed. 
  73.  
  74.    If the mouse pointer is in the mode line - the line that is in a
  75. different typeface (usually backlit, maybe black instead of white) --
  76. when the mouse button is clicked, a Mode-Mouse key is sent to the
  77. editor. The buffer that the selected status line is associated with is
  78. made the current buffer, the point is set to the value of point for
  79. that window, then whatever command is bound to that button is
  80. executed. Most of the Mode-Mouse keys invoke functions that act on the
  81. entire window or buffer.
  82.  
  83.    Clicking in the echo line - the line at the bottom of the screen
  84. where prompts and message appear - results in an Echo-Mouse key.
  85. Whatever command is bound to that button will be executed.  Since the
  86. echo line is not part of a buffer or a window, all the functions bound
  87. to Echo-Mouse keys affect the state of the editor as a whole.
  88.    
  89.    The default bindings for the hot mouse (as distributed) are:
  90.  
  91.  Qualifiers  |            Area clicked
  92.              |
  93. C  A  Shift  |    Text window        Mode line    Echo line
  94. -------------+---------------------------------------------------------
  95.          |    dot to mouse        forward page    switch to other buffer 
  96.       X         |    recenter        backward page    kill buffer
  97.    X         |    delete word        split window    describe key
  98.    X  X         |    kill line        delete window    describe bindings
  99. X         |    delete char        goto bob    suspend MG
  100. X     X         |    delete whitespace    goto eob    quit
  101. X  X         |    kill region        enlarge window    list buffers
  102. X  X  X         |    yank            shrink window    toggle Intuition window
  103.  
  104.    To help keep straight what the various keys do, notice that the
  105. Status and Echo groups come in pairs; the shifted version of a key is in
  106. some sense the opposite of the unshifted version. There is no opposite
  107. for display-buffers, so that key is bound to "amiga-toggle-border",
  108. which toggles MG' Intuition window between bordered and borderless. 
  109.  
  110.    Like any MG key, you are free to rebind the 24 mouse buttons to do
  111. whatever you wish.  You may even rebind them in your startup sequence.
  112. NOTE: only functions that start with the prefix "mouse-" are able to
  113. handle clicks in windows and mode lines, because they know how to figure
  114. out where the mouse was clicked. Conversely, any non-mouse function may
  115. be bound to an Echo-Mouse key, because clicking in the echo area does
  116. not send the x,y click information to the function.
  117.  
  118.    If the iconification code is compiled in, then Echo-Mouse is bound
  119. to ``amiga-iconify'' by default.
  120.  
  121.                THE KEYBOARD
  122.                ------------
  123.  
  124.    There is a shortcut for many of the Meta commands (usually indicated
  125. by the ESC character): hold down the ALT key at the same time you type
  126. what usually comes after the ESC. 
  127.  
  128.    Historically, this is why keys that are typed with ESC in front of
  129. them are called META keys; on the terminals at MIT where the Emacs
  130. editor (MG's spiritual parent) was originally written, there was a META
  131. key on the keyboard that did what the ALT key does. However, not many
  132. terminals outside of MIT have the META key at all, so the ESC key was
  133. nominated as a way to tell the system that the next character should be
  134. converted into a META key before it is interpreted. 
  135.  
  136.    MG also recognizes Amiga function keys.  For quick help on a key,
  137. type the HELP key and then the key you want help on. The following
  138. commands are bound to the Amiga function keys:
  139.  
  140.     Key            Function
  141.     --------------------------------------------
  142.     Help            describe-key-briefly
  143.  
  144.     Left            backward-char
  145.     Shift-Left        backward-word
  146.     Right            forward-char
  147.     Shift-Right        forward-word
  148.  
  149.     Up            previous-line
  150.     Shift-Up        backward-paragraph
  151.  
  152.     Down            next-line
  153.     Shift-Down        forward-paragraph
  154.  
  155.     F1            find-file
  156.     Shift-F1        find-file-other-window
  157.     F2            save-buffer
  158.     Shift-F2        write-file
  159.     F3            scroll-up (page down)
  160.     Shift-F3        scroll-down (page up)
  161.     F4            enlarge-window
  162.     Shift-F4        shrink-window
  163.     F5            fill-paragraph
  164.     Shift-F5        query-replace
  165.     F6            split-window-vertically
  166.     Shift-F6        delete-other-windows
  167.     F7            transpose-chars
  168.     Shift-F7        just-one-space
  169.     F8            start-kbd-macro
  170.     Shift-F8        end-kbd-macro
  171.     F9            call-last-kbd-macro
  172.     Shift-F9        describe-bindings
  173.     F10            list-buffers
  174.     Shift-F10        save-buffers-kill-emacs
  175.  
  176.               FUNCTION KEY NAMES
  177.               ------------------
  178.  
  179. On the Amiga, all the function keys are readily visible on the
  180. keyboard, so this table of key names for use in strings is fairly
  181. self-explanitory.  If you want to rebind Shift-Down-Arrow to scroll-up
  182. (move down a whole page), for example, insert the line
  183.  
  184.     global-set-key "\F5" scroll-up
  185.  
  186. in your s:mg-startup file.
  187.  
  188.     Amiga key            Startup name
  189. -------------------------------------------------------------------------
  190.     Up-Arrow            \F0
  191.     Down-Arrow            \F1
  192.     Left-Arrow            \F2
  193.     Right-Arrow            \F3
  194.  
  195.     Shift-Up-Arrow            \F4
  196.     Shift-Down-Arrow        \F5
  197.     Shift-Left-Arrow        \F6
  198.     Shift-Right-Arrow        \F7
  199.  
  200.     Help                \F9
  201.  
  202.     F1                \F12
  203.     F2                \F13
  204.     F3                \F14
  205.     F4                \F15
  206.     F5                \F16
  207.     F6                \F17
  208.     F7                \F18
  209.     F8                \F19
  210.     F9                \F20
  211.     F10                \F21
  212.  
  213.     Shift-F1            \F22
  214.     Shift-F2            \F23
  215.     Shift-F3            \F24
  216.     Shift-F4            \F25
  217.     Shift-F5            \F26
  218.     Shift-F6            \F27
  219.     Shift-F7            \F28
  220.     Shift-F8            \F29
  221.     Shift-F9            \F30
  222.     Shift-F10            \F31
  223.  
  224.     Mouse                \F32
  225.     Ctrl-Mouse            \F33
  226.     Shift-Mouse            \F34
  227.     Shift-Ctrl-Mouse        \F35
  228.     Meta-Mouse            \F36
  229.     Meta-Ctrl-Mouse            \F37
  230.     Meta-Shift-Mouse        \F38
  231.     Meta-Shift-Ctrl-Mouse        \F39
  232.  
  233.     Mode-Mouse            \F40
  234.     Ctrl-Mode-Mouse            \F41
  235.     Shift-Mode-Mouse        \F42
  236.     Shift-Ctrl-Mode-Mouse        \F43
  237.     Meta-Mode-Mouse            \F44
  238.     Meta-Ctrl-Mode-Mouse        \F45
  239.     Meta-Shift-Mode-Mouse        \F46
  240.     Meta-Shift-Ctrl-Mode-Mouse    \F47
  241.  
  242.     Echo-Mouse            \F48
  243.     Ctrl-Echo-Mouse            \F49
  244.     Shift-Echo-Mouse        \F50
  245.     Shift-Ctrl-Echo-Mouse        \F51
  246.     Meta-Echo-Mouse            \F52
  247.     Meta-Ctrl-Echo-Mouse        \F53
  248.     Meta-Shift-Echo-Mouse        \F54
  249.     Meta-Shift-Ctrl-Echo-Mouse    \F55
  250.  
  251.  
  252.                  THE MENU
  253.                  --------
  254.    If the menu option is compiled into the program, you can also use the
  255. Intuition menu, just like any other well-written Amiga program. The menu
  256. names are relatively self-explanitory, as are the names inside each
  257. menu. If you want to learn what the command key is for a menu function,
  258. use the command "apropos" (invoked by Ctrl-Backspace a), followed by a
  259. substring of the menu item you're curious about. 
  260.  
  261.                 THE BROWSER
  262.                 -----------
  263.  
  264.    The Browser is the next best (or even better, for some purposes)
  265. thing to a file requester. Simply put, it places the directory tree up
  266. in the menu bar, where you can visit files simply by selecting their
  267. names from the menu bar. Try it, you'll like it.  If the MENU option is
  268. also compiled in, the editing menus are all submenus of the first,
  269. "Edit" menu, and the Browser uses the rest of the menu bar.
  270.  
  271.                WINDOW OPTIONS 
  272.                --------------
  273.  
  274.    As a service to those of us who want a full-size, 80-column editing
  275. window on a 640x200 screen, Amiga MG allows you to make its window
  276. borderless. If you like, you can take over the full Workbench screen (48
  277. rows, 80 columns in interlace mode under 1.2). Borderless windows can be
  278. "visually confusing", to quote the author of Intuition, so it's probably
  279. best to either to 1) take over the whole screen or 2) put the MG window
  280. at the bottom of the screen. 
  281.  
  282.    When Amiga MG starts up on a 640x200 screen, its initial window is
  283. borderless, and 640x200 pixels in dimension. To change to a resizeable
  284. window, issue the command "M-x amiga-toggle-border" or select the
  285. "Toggle Window" subitem from the "Window" menu (if it is compiled into
  286. the program).  MG will create a new, resizeable, bordered window, which
  287. you can then set to whatever size you wish using the sizing gadget in
  288. the bottom left corner of the window. 
  289.  
  290.    To go back to a borderless window, issue the "Toggle Window" command
  291. again. MG will remember the current size of the resizeable window, and
  292. create a borderless window with the same dimensions and position. Since
  293. under Workbench 1.2 you can use a 640x400 window, this lets you take up
  294. the entire screen, 48 rows by 80 columns. 
  295.  
  296. If you use MoreRows, MG will open up a resizeable window if there's
  297. enough room on the screen for an 24 line by 80 column window.
  298.  
  299.  
  300.                CHANGING THE WINDOW'S FONT
  301.                --------------------------
  302.  
  303.    There may be times when you'd like to use another font on the screen,
  304. either to make the text easier to read, or for some special effect, like
  305. editing something on a TV projection system.  MG lets you change the
  306. font that is used to draw characters in the window, using the command
  307. "M-x amiga-set-font".
  308.  
  309.    You can use the universal argument to set the desired text font size,
  310. for example saying "C-u 12 M-x set-font", then typing "opal" when it
  311. prompts you for the name of the font.  If you give an argument that is
  312. less than 0, MG resets the window's font to the system default (set by
  313. Preferences).  If you don't give an argument, MG prompts you for the
  314. desired font size.
  315.  
  316.    Changing the window's font to one that is designed to be
  317. proportionally spaced does not work very well, because MG expects the
  318. all characters on the screen to be the same width, which is of course
  319. not the case with proportional fonts.  MG lets you use proportional
  320. fonts, but it asks you to make sure first.
  321.  
  322.  
  323.                 TEXT RENDITION
  324.                 --------------
  325.  
  326.    If you really want to, you can change the "soft style" the console
  327. device uses to draw characters in the text area and the mode line.  The
  328. possible values for these styles are:
  329.  
  330.     0    plain
  331.     1    boldface
  332.     3    italic
  333.     4    underline
  334.     7    inverse
  335.  
  336.    About the only useful values are the ones for plain, boldface or
  337. italics. The default value for text is 0 (plain, of course), while the
  338. default for the mode line is 7 (inverse video). These can be changed by
  339. the appropriate #definitions of MODE_RENDITION and TEXT_RENDITION. 
  340.  
  341.    The commands to change the rendition values are:
  342.  
  343.     amiga-text-rendition
  344.         Set text area rendition
  345.     amiga-mode-rendition
  346.         Set mode line rendition (this is by far the more useful)
  347.  
  348.                 COLOR
  349.                 -----
  350.  
  351.    You can set the colors the console device uses to draw the text you
  352. are editing. (This does not mean that you can specify *any* color; your
  353. choices are limited to the colors being used by Intuition to maintain
  354. the Workbench screen.) The commands that control this behavior are:
  355.  
  356.     amiga-text-foreground
  357.         Sets the color used to draw the characters you see in the
  358.         text area (distinct from the mode line area for each window).
  359.         Accepts a number from 0 to 7.  The value initially used is 1.
  360.         You can get a reverse video screen by selecting 0 for this
  361.         value and 1 for the background color
  362.  
  363.     amiga-text-background
  364.         Sets the color used the draw the background behind characters
  365.         in the text area.  Accepts the same values as
  366.         amiga-text-foreground.  The initial value is 0.
  367.  
  368.     amiga-mode-foreground
  369.         Sets the foreground color used by the mode line.  If you
  370.         set this to 0 and the background color to 1, you can get
  371.         a reverse video mode line even when you select italics for
  372.         the mode line rendition (see RENDITION)
  373.  
  374.     amiga-mode-background
  375.         Sets the background color for the mode line.  You should
  376.         get the idea by now.
  377.  
  378.                 ICONIFICATION
  379.                 -------------
  380.  
  381.    Leo Schwab wrote a set of very general routines for allowing an
  382. Amiga program to shrink its window to an icon.  This icon can then be
  383. moved around on the screen, and re-expanded to its full size by a
  384. double click, like the one used to open a drawer.  Amiga MG2a
  385. provides this capability through the function ``amiga-iconify'',
  386. which is bound to Echo-Mouse by default if the iconification code is
  387. present.  Not only is this a great way to prevent screen clutter, but
  388. it also frees 50K of CHIP RAM while MG's window is iconified (on a 30
  389. line by 80 column mg window).
  390.  
  391.    To iconify the window, click the mouse in MG's echo line or issue
  392. the extended command ``amiga-iconify.''  To expand MG's window back
  393. to its full size, double-click on the MG2a icon in the same way you
  394. would on a disk or drawer icon.  The icon can also be dragged
  395. about, and will remember its last position when the window is
  396. iconified again.
  397.         
  398.  
  399.                     REXX
  400.                     ----
  401.  
  402.     ARexx is a commercial product that provides an extension language -
  403. a macro facility - to Amiga programs for very little overhead. It also
  404. allows communications between programs that know nothing of each
  405. other. It will be bundled with AmigaDOS version 2.0, so everyone should
  406. have it in the near future.
  407.  
  408.     The Amiga version of mg3 has some functions specifically to
  409. support Rexx. They allow for the creation of some very powerfull mg
  410. scripts, including the creation of integrated programming environments
  411. for most compiled languages, and of the ability to dynamically test
  412. functions from inside the editor for intrepreted languages. The mg3
  413. Rexx support functions are documented below; see the Rexx directory
  414. for examples using this functionality.
  415.  
  416.     Rexx macros can be invoked from mg in one of two ways. The first
  417. way is close to the "standard rexx" interface. The second provides
  418. much more flexibility and power to the user. Finally, you can arrange
  419. for a rexx macro to be invoked on exiting from mg (for cleanup, or
  420. whatever).
  421.  
  422.     The first way is the "rexx" command. This reads a single argument
  423. from the user, and is passed to ARexx as a command. If the string is
  424. quoted, ARexx will execute it as a "string macro", interpreting the
  425. contents. If it's not quoted, the first token of the string is taken
  426. to be a command name. That command is searched for, with either no
  427. extension, or the extension "mg". If found, the file will be invoked,
  428. with any text after the command name arranged as the argument to the
  429. command. Alternatively, if the Rexx command is invoked with a
  430. universal argument, the rest of the string will tokenized by rexx.
  431. This allows for arguments that can't normally be passed. For example,
  432. to pass a null argument, you would do:
  433.  
  434.     C-u M-x rexx C-m macroname "" C-m.
  435.  
  436. There's no way to pass a null argument without invoking tokenization.
  437. Rexx should be the standard way of invoking rexx macros.
  438.  
  439.     Note that having all unrecognized commands passed to rexx doesn't
  440. work in mg, as it tries to complete command names. Doing this right
  441. would require more code than is justified in a micro emacs.  However,
  442. you can use named kbd macros to invoke rexx macros, thus putting rexx
  443. commands into the standard command set. In addition, you can also use
  444. command completion on those macro names.
  445.  
  446.     The second, and more powerful technic is "rexx-do-region". This
  447. passes the contents of the region to ARexx as a string macro, invoking
  448. it as a function. The numeric argument to rexx-do-string controls it's
  449. behavior in two ways. If the argument doesn't exist, or is positive,
  450. the result string returned by the macro is displayed in the echo line.
  451. If the argument is zero or negative, then the result string from the
  452. macro is inserted into the buffer at the point. If it's given an
  453. argument, then the absolute magnitude of the argument is the number of
  454. argument strings to be passed to the macro. The user is asked for
  455. these one at a time, and they are then made available to the macro via
  456. the normal argument mechanisms. Due to overloading of the argument,
  457. there is no way to invoke a macro with no arguments and have it's
  458. returned value inserted into the buffer.
  459.  
  460.     A typical use for this would be to mark a Rexx procedure
  461. definition, then use rexx-do-region to pass the function and any
  462. arguments to Rexx for evaluation from inside of mg. Writing the
  463. function to disk is not required, nor is writing a skeleton to invoke
  464. the function for testing.
  465.  
  466.     You can also use "rexx-do-on-exit". It takes a string in exactly
  467. the same way that "rexx" does, however, it doesn't do any of the
  468. argument processing that the "rexx" command does. This is for cleaning
  469. up on exit from mg.
  470.  
  471.     Finally, "rexx-wait" causes mg to close it's window and wait for a
  472. message to it's Rexx port. This is useful for uncluttering your
  473. workbench and freeing chip memory. The companion function
  474. "amiga-window-to-top" is usefull for opening an mg doing a rexx-wait.
  475.  
  476.     When ARexx code is run from mg, any commands issued by the Rexx
  477. interpreter are evaluated as expressions by mg. Thus, all commands
  478. normally available to the user are available from Rexx code. However,
  479. the tokenization must be kept in mind when writing Rexx macros. For
  480. example, to search for the text string "the word", one should use:
  481. 'search "the word"', not 'search the word'.
  482.  
  483.     In addition, most of the mg commands are of the form
  484. 'list-of-words', with embedded '-''s. Since ARexx recognizes these as
  485. operators outside of strings, most commands should be embedded in
  486. quotes of some form or another. It's a good practice to put all
  487. commands in quotes, regardless of whether they need it or not. In
  488. fact, This is true for all Rexx command hosts, not just mg. 
  489.  
  490.     Mg commands offer only four return values:
  491.  
  492.     0 - completed normally
  493.     1 - error, such as moving past the end of the file
  494.     2 - failure, such as a user abort or command parse error
  495.     3 - locked, this mg isn't currently accepting asynch macros
  496.     4 - this mg doesn't do Rexx messages at all
  497.  
  498.     Macros should always abort on a return of 2. A return of 1 can be
  499. used for flow control, or ignored.
  500.  
  501.     In addition to the commands normally available, ARexx support in
  502. mg has commands added that allow the user to query the editor for
  503. data, and modify it. All of these start with "rexx-", to avoid
  504. removing otherwise useful names from the namespace. None of these
  505. commands may be invoked except from a Rexx script.
  506.  
  507.     rexx-insert takes a single argument, and inserts it into the
  508. current buffer at the point. Note that that argument must be a valid
  509. argument by mg expression evaluation criteria, not by Rexx's. So to
  510. insert the value of the variable addstuff, one should do something
  511. like:
  512.  
  513.     'rexx-insert' '"'addstuff'"'
  514.  
  515. to be safe. To be very safe, and somewhat shorter, you should always
  516. invoke rexx-insert as 'rexx-insert "', and end it with '"'. Also note
  517. that '"' and '\' get special treatment, and must be preceeded by a '\'
  518. to be inserted safely. The file rexx/slashquote returns a single
  519. string that is the "rexx-insertable" version of it's argument, so the
  520. above would be:
  521.  
  522.     'rexx-insert' '"'slashquote(addstuff)'"'
  523.  
  524. to be absolutly safe.
  525.  
  526.     Other rexx-specific functions that take a single string argument are:
  527.  
  528.     rexx-display: instead of inserting it's argument into the buffer,
  529. this command displays it for the user.
  530.  
  531.     There are also commands to get information from the user. They all
  532. take a message like rexx-display, and display it as a prompt in the
  533. echo area. They then read a string from the user, and return it as
  534. their result. They are:
  535.  
  536.     rexx-request gets an arbitrary string. rexx-request-buffer gets a
  537. buffer name, with completion. rexx-request-function gets a function or
  538. kbd macro name, with completion. rexx-request-macro gets a kbd macro
  539. name, with completion. Aborts or errors during the reads are passed on
  540. to the Rexx macro.
  541.  
  542.     rexx-line also returns data via result. It returns the contents of
  543. a single line of text from the current buffer, sans any trailing
  544. newline. It's numeric argument is the line number to be returned.
  545. Negative arguments count backwards from the end of the buffer.  If it
  546. has no argument, it returns the current line. Referring to a
  547. non-existent line is an error.
  548.  
  549.     Next, there is a group of routines that take a Rexx variable name
  550. as an argument, use it as the stem of a compound symbol. The format
  551. for all of them is them is the same: for n from 1 to stem.0, stem.n
  552. contains data. With one exception, there are no more levels in the
  553. compound variables. If for any reason all the stem variables the
  554. command wants to set cannot be set, an error is returned. Note that
  555. unlike XEDIT, the name of the stem is not fixed - it's the argument to
  556. the command. So "rexx-point point1" <other commands> "rexx-point
  557. point2" creates two compound variables, point1 and point2, each
  558. holding data about a point.
  559.  
  560.     rexx-point: stem.1 is the line number the point is on, stem.2 is
  561. the points offset into the line, stem.3 is the text of the line the
  562. point is on.
  563.  
  564.     rexx-mark: identical to rexx-point, except that it returns data
  565. about the mark instead of the point. If no mark exists in the current
  566. buffer, rexx.0 is set to 0, and an error is returned.
  567.  
  568.     rexx-buffer: stem.1 is the buffer name, stem.2 is the file name
  569. associated with the buffer, stem.3 is the number of lines in the
  570. buffer, stem.4 is the number of characters in the buffer, stem.5 is
  571. the line # the point is on, stem.6 is the line # the mark is on. If no
  572. mark exists, stem.6 is not set, stem.0 will be 5, and an error will be
  573. returned. If no file is associated with the buffer, the stem.2 will be
  574. "", and no error will be signaled.
  575.  
  576.     rexx-window: stem.1 is the height of the current window in
  577. characters, stem.2 is it's width, stem.3 is the number of the top line
  578. in the window, stem.4 is the name of the displayed buffer, stem.5 is
  579. the name of the file in that buffer. If there is no buffer name (which
  580. should never happen), then stem.0 will be 3, and an error will be
  581. returned.
  582.  
  583.     rexx-region returns the text of the region. If no mark is set
  584. (hence no region), stem.0 is set to 0, and an error is returned. The
  585. text of each line is returned in stem.#, with the newline (unlike
  586. rexx-line).  The last line may not have a newline, if the region does
  587. not end after a newline character.
  588.  
  589.     rexx-buffer-list is the exception mentioned above. Instead of
  590. returning data in stem.#, these contain another level of compound
  591. variable. Stem.# contains data about a specific buffer, like so:
  592. stem.#.NAME is the name of buffer #, stem.#.FILE is the file it's
  593. editing, and stem.#.STATUS is either "" or "CHANGED " if it's been
  594. changed, with "CURRENT" appended if this is the current buffer.
  595.  
  596.     Finally, there are two commands that allow Rexx macros to issue
  597. commands to mg asynchronously. When a rexx macro is started, mg is
  598. locked, meaning that only Rexx commands from that macro will be
  599. processed. Any other will return an error code 3. That macro may
  600. unlock mg, allowing the user to issue mg commands from the keyboard.
  601. After unlocking mg, the macro may continue to issue commands to mg,
  602. and even relock mg. Further, any Rexx script, no matter what client it
  603. was started from, may issue commands to an unlocked mg, and lock it.
  604. The two commands are:
  605.  
  606.     rexx-unlock unlocks the current mg, allowing other macros and the
  607. user to enter commands to it. It returns the value of the address for
  608. asynch commands to this mg as a result. 
  609.  
  610.     rexx-lock locks the current mg, so that mg only accepts commands
  611. from the locking macro. It returns the address to use for the commands
  612. as a result. If called without the results option being on, it has no
  613. affect. If you call rexx-lock to lock an mg, you must call rexx-unlock
  614. to free it. Otherwise, the mg will be hung, waiting for a packet from
  615. that macro that it will never get.
  616.  
  617.     Typical useage of the above two might be:
  618.  
  619.     options results
  620.     /* Get all information we need, and verify it */
  621.     
  622.     /* Free ourselves */
  623.     'rexx-unlock'
  624.     address value result
  625.  
  626.     /* Do much computing; the user is free to use the editor */
  627.  
  628.     /* Get back in synch */
  629.     'rexx-lock'
  630.     address value result
  631.     'rexx-display "Computation finished, inserting into My_Buffer"'
  632.  
  633.     /* Do the insert */
  634.  
  635.     When mg is first started, it tries to open a public port named
  636. "mg".  If that fails, it tries 'mg!', and then 'mg"', and so on
  637. through 'mg~', then to 'mg!!', 'mg"!', and so through the ASCII
  638. character set, up to "mg~~". Sending 'rexx-lock' commands to those
  639. port names until one succeeds is the best way to find and lock an mg.
  640.  
  641.  
  642.  
  643.                 FUNCTION LIST
  644.                 -------------
  645.  
  646.    For completeness, here is a list of all Amiga MG functions that are
  647. specific to the Amiga. 
  648.  
  649. amiga-iconify
  650.     Iconifies the Amiga MG window.
  651. amiga-menu
  652.     The entry point for using MG's Intuition menu.  This function
  653.     figures out which menu selection was used, then calls the
  654.     appropriate function by name (not hard-coded key value)
  655. amiga-mouse
  656.     Set dot to where the mouse is pointing.  Two clicks in the same
  657.     spot set the mark too.
  658. mouse-*
  659.     Functions that first either 1) move point to where the mouse
  660.     points to or 2) select the buffer associated with the mode line
  661.     the mouse clicked in, then call the function indicated by the
  662.     rest of the name.  These functions are all "bound" to various
  663.     mouse click keys.
  664. amiga-set-font
  665.     Set the font used to draw characters inside the MG window.
  666.     A positive argument is used for the size of the font, while
  667.     a nonpositive argument requests that the font be set to the
  668.     system default font.  Menu items are not affected by this command.
  669. amiga-mode-rendition
  670. amiga-text-rendition
  671.     Set the way your text (or the mode line) is rendered.  Choose
  672.     from 0 (plain), 1 (bold), 3 (italic), 4 (underline), or
  673.     7 (reverse video). 0, 1, and 3 are about the only really useful
  674.     ones for text; 7 is the default for the mode line.
  675. amiga-text-foreground
  676. amiga-text-background
  677. amiga-mode-foreground
  678. amiga-mode-background
  679.     Set the system color used to draw the characters in the text area
  680.     and mode line.  Accepts a value between 0 and 7; the default for
  681.     the background is 0, the default for the text is 1.
  682. amiga-toggle-border
  683.     Switch your window between resizable and borderless. Lets you
  684.     take over the whole screen (80 columns! 48 lines in interlace!)
  685. amiga-window-to-top
  686.     Only defined if REXX is enabled. Causes mg3 to bring it's
  687.     window and screen to the top of the screen.
  688. rexx
  689.     Send a command to rexx.
  690. rexx-wait
  691.     Close the window, and reopen it on reciept of a Rexx message
  692. rexx-do-on-exit
  693.     Arrange for a rexx command to be issued when mg exits.
  694. rexx-do-region
  695.     Send the current region to rexx as a string macro.
  696. rexx-buffer
  697. rexx-buffer-list
  698. rexx-display
  699. rexx-insert
  700. rexx-line
  701. rexx-lock
  702. rexx-mark
  703. rexx-point
  704. rexx-region
  705. rexx-request
  706. rexx-request-buffer
  707. rexx-request-function
  708. rexx-request-macro
  709. rexx-unlock
  710. rexx-window
  711.     Only issueable from inside of a Rexx script. See the section on
  712.     Rexx for details.